home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1995 April / Internet Tools.iso / ip / ppp / sunos / dp / rwhod.diffs.Z / rwhod.diffs
Encoding:
Text File  |  1993-08-15  |  3.0 KB  |  139 lines

  1. *** /tmp/,RCSt1a08140    Thu Jul 23 11:18:15 1992
  2. --- rwhod.c    Thu Dec 19 09:37:57 1991
  3. ***************
  4. *** 39,44
  5.    */
  6.   #define AL_INTERVAL (3 * 60)
  7.   
  8.   struct    sockaddr_in sin = { AF_INET };
  9.   
  10.   extern    errno;
  11.  
  12. --- 39,52 -----
  13.    */
  14.   #define AL_INTERVAL (3 * 60)
  15.   
  16. + /*
  17. +  * For the -s option that will send out rwho packets, but not
  18. +  * recieve them or write them to a file
  19. +  *
  20. +  */
  21. + int supplier_only;
  22. + int suppress_broadcast, suppress_pnt2pnt;
  23.   struct    sockaddr_in sin = { AF_INET };
  24.   
  25.   extern    errno;
  26. ***************
  27. *** 81,87
  28.   int    getkmem();
  29.   struct    in_addr inet_makeaddr();
  30.   
  31. ! main()
  32.   {
  33.       struct sockaddr_in from;
  34.       struct stat st;
  35.  
  36. --- 89,97 -----
  37.   int    getkmem();
  38.   struct    in_addr inet_makeaddr();
  39.   
  40. ! main(argc, argv)
  41. ! int argc;
  42. ! char **argv;
  43.   {
  44.       struct sockaddr_in from;
  45.       struct stat st;
  46. ***************
  47. *** 92,97
  48.       char *cp;
  49.       extern char *index();
  50.   
  51.       if (getuid()) {
  52.           fprintf(stderr, "rwhod: not super user\n");
  53.           exit(1);
  54.  
  55. --- 102,125 -----
  56.       char *cp;
  57.       extern char *index();
  58.   
  59. +     extern char *optarg;
  60. +     extern int optind;
  61. +     int c, errflag = 0;
  62. +     while ((c = getopt(argc, argv, "sbp")) != -1)
  63. +         switch (c) {
  64. +          case 's':    supplier_only++;    break;
  65. +          case 'b':    suppress_broadcast++;    break;
  66. +          case 'p':    suppress_pnt2pnt++;    break;
  67. +          case '?':    errflag++;        break;
  68. +         }
  69. +     
  70. +     if (optind < argc)
  71. +         errflag++;
  72. +     
  73. +     if (errflag)
  74. +         fprintf(stderr, "usage: rwhod [-s] [-b] [-p]\n");
  75.       if (getuid()) {
  76.           fprintf(stderr, "rwhod: not super user\n");
  77.           exit(1);
  78. ***************
  79. *** 168,173
  80.   
  81.           cc = recvfrom(s, (char *)&wd, sizeof (struct whod), 0,
  82.               &from, &len);
  83.           if (cc <= 0) {
  84.               if (cc < 0 && errno != EINTR)
  85.                   syslog(LOG_WARNING, "recv: %m");
  86.  
  87. --- 196,203 -----
  88.   
  89.           cc = recvfrom(s, (char *)&wd, sizeof (struct whod), 0,
  90.               &from, &len);
  91. +         if (supplier_only)
  92. +             continue;
  93.           if (cc <= 0) {
  94.               if (cc < 0 && errno != EINTR)
  95.                   syslog(LOG_WARNING, "recv: %m");
  96. ***************
  97. *** 441,446
  98.           }
  99.           np->n_flags = ifreq.ifr_flags;
  100.           if (np->n_flags & IFF_POINTOPOINT) {
  101.               if (ioctl(s, SIOCGIFDSTADDR, (char *)&ifreq) < 0) {
  102.                   syslog(LOG_ERR, "ioctl (get dstaddr)");
  103.                   free((char *)np);
  104.  
  105. --- 471,480 -----
  106.           }
  107.           np->n_flags = ifreq.ifr_flags;
  108.           if (np->n_flags & IFF_POINTOPOINT) {
  109. +             if (suppress_pnt2pnt) {
  110. +                 free((char *)np);
  111. +                 continue;
  112. +             }
  113.               if (ioctl(s, SIOCGIFDSTADDR, (char *)&ifreq) < 0) {
  114.                   syslog(LOG_ERR, "ioctl (get dstaddr)");
  115.                   free((char *)np);
  116. ***************
  117. *** 451,456
  118.                 np->n_addr, np->n_addrlen);
  119.           }
  120.           if (np->n_flags & IFF_BROADCAST) {
  121.               if (ioctl(s, SIOCGIFBRDADDR, (char *)&ifreq) < 0) {
  122.                   syslog(LOG_ERR, "ioctl (get broadaddr)");
  123.                   free((char *)np);
  124.  
  125. --- 485,494 -----
  126.                 np->n_addr, np->n_addrlen);
  127.           }
  128.           if (np->n_flags & IFF_BROADCAST) {
  129. +             if (suppress_broadcast) {
  130. +                 free((char *)np);
  131. +                 continue;
  132. +             }
  133.               if (ioctl(s, SIOCGIFBRDADDR, (char *)&ifreq) < 0) {
  134.                   syslog(LOG_ERR, "ioctl (get broadaddr)");
  135.                   free((char *)np);
  136.